package main.二分查找;

/**
 * @author tmh
 * @date 2024/7/24 17:36
 * @description
 */
public class T35搜索插入位置 {
    /**
     * 关于这个解法的一些理解:
     * 如果中间位置的值等于目标值，则返回 mid，即目标值所在的索引。
     * 如果在数组中没有找到目标值，循环结束后，返回 high + 1。
     * 这是因为 high 最终指向的是小于目标值的最大元素的位置，所以目标值应插入在 high + 1 位置。
     * @param nums
     * @param target
     * @return
     */
    public int searchInsert(int[] nums, int target) {
        int low = 0;
        int high = nums.length - 1;
        while (low <= high) {
            int mid = low + ((high - low) >> 2);
            if (nums[mid] > target) {
                high = mid - 1;
            } else if (nums[mid] < target) {
                low = mid + 1;
            } else {
                return mid;
            }
        }
        return high + 1;
    }
}
